From 61c44ec4247af902444bee6361baa590ab4cd646 Mon Sep 17 00:00:00 2001 From: "iap10@labyrinth.cl.cam.ac.uk" Date: Tue, 11 May 2004 14:24:36 +0000 Subject: [PATCH] bitkeeper revision 1.894 (40a0e224yVjcoBy1sCnhKzymuscpoQ) Add "show_traceX" function to Xen that will print a call trace from the current stack pointer -- useful if you want to print out a debug message to show how you got somewhere without calling BUG(); --- xen/arch/i386/traps.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/xen/arch/i386/traps.c b/xen/arch/i386/traps.c index f362faa05f..97c682a2af 100644 --- a/xen/arch/i386/traps.c +++ b/xen/arch/i386/traps.c @@ -107,6 +107,7 @@ static inline int kernel_text_address(unsigned long addr) } + void show_trace(unsigned long * stack) { int i; @@ -126,6 +127,13 @@ void show_trace(unsigned long * stack) printk("\n"); } +void show_traceX(void) +{ + unsigned long *addr; + __asm__ __volatile__ ("movl %%esp,%0" : "=r" (addr) : ); + show_trace(addr); +} + void show_stack(unsigned long *esp) { unsigned long *stack; @@ -172,6 +180,7 @@ void show_registers(struct pt_regs *regs) regs->xfs & 0xffff, regs->xgs & 0xffff, ss); show_stack(®s->esp); + show_trace(®s->esp); } @@ -322,6 +331,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs, long error_code) __asm__ __volatile__ ("movl %%cr2,%0" : "=r" (addr) : ); +// __sti(); // XXXX This may not be safe??? LDT issues??? + perfc_incrc(page_faults); if ( unlikely(addr >= LDT_VIRT_START) && @@ -339,7 +350,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, long error_code) if ( unlikely(p->mm.shadow_mode) && (addr < PAGE_OFFSET) && shadow_fault(addr, error_code) ) - return; /* Return TRUE if fault was handled. */ + return; /* Returns TRUE if fault was handled. */ if ( unlikely(!(regs->xcs & 3)) ) goto fault_in_hypervisor; -- 2.30.2